]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
main: Consider color-scheme setting for default stylesheet
authorFlorian Müllner <fmuellner@gnome.org>
Fri, 3 Jun 2022 15:21:08 +0000 (17:21 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Thu, 25 May 2023 15:10:53 +0000 (17:10 +0200)
Our own preference - equivalent to AdwStyleManager's color-scheme
property - is expressed via a new session mode property.

The default mode uses 'prefer-dark', gnome-classic is expected
to use 'force-light'.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5545

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2324>

js/ui/main.js
js/ui/sessionMode.js

index 6ecb1a06bdbd561a2c2a95945c878248a1c11413..88e2e85d3a1796d323838a1155c4d74c1e3f1736 100644 (file)
@@ -7,7 +7,7 @@
             kbdA11yDialog, introspectService, start, pushModal, popModal,
             activateWindow, moveWindowToMonitorAndWorkspace,
             createLookingGlass, initializeDeferredWork,
-            getThemeStylesheet, setThemeStylesheet, screenshotUI */
+            getStyleVariant, getThemeStylesheet, setThemeStylesheet, screenshotUI */
 
 const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
 
@@ -179,6 +179,7 @@ function start() {
     sessionMode.connect('updated', _sessionUpdated);
 
     St.Settings.get().connect('notify::high-contrast', _loadDefaultStylesheet);
+    St.Settings.get().connect('notify::color-scheme', _loadDefaultStylesheet);
 
     // Initialize ParentalControlsManager before the UI
     ParentalControlsManager.getDefault();
@@ -419,6 +420,25 @@ function _getStylesheet(name) {
     return null;
 }
 
+/** @returns {string} */
+function getStyleVariant() {
+    const {colorScheme} = St.Settings.get();
+    switch (sessionMode.colorScheme) {
+    case 'force-dark':
+        return 'dark';
+    case 'force-light':
+        return 'light';
+    case 'prefer-dark':
+        return colorScheme === St.SystemColorScheme.PREFER_LIGHT
+            ? 'light' : 'dark';
+    case 'prefer-light':
+        return colorScheme === St.SystemColorScheme.PREFER_DARK
+            ? 'dark' : 'light';
+    default:
+        return '';
+    }
+}
+
 function _getDefaultStylesheet() {
     let stylesheet = null;
     let name = sessionMode.stylesheetName;
@@ -427,8 +447,11 @@ function _getDefaultStylesheet() {
     if (St.Settings.get().high_contrast)
         stylesheet = _getStylesheet(name.replace('.css', '-high-contrast.css'));
 
+    if (stylesheet === null)
+        stylesheet = _getStylesheet(name.replace('.css', `-${getStyleVariant()}.css`));
+
     if (stylesheet == null)
-        stylesheet = _getStylesheet(sessionMode.stylesheetName);
+        stylesheet = _getStylesheet(name);
 
     return stylesheet;
 }
index 83786a5c7aa93ae7b998ad6766fe8f011d607872..a78e92deaf69ae128cdd7c711fa1c3606eb8d055 100644 (file)
@@ -22,7 +22,8 @@ if (Config.HAVE_NETWORKMANAGER)
 const _modes = {
     'restrictive': {
         parentMode: null,
-        stylesheetName: 'gnome-shell-dark.css',
+        stylesheetName: 'gnome-shell.css',
+        colorScheme: 'prefer-dark',
         themeResourceName: 'gnome-shell-theme.gresource',
         hasOverview: false,
         showCalendarEvents: false,